package day323;

import java.util.Arrays;

/**
 * @author tmh
 * @date 2023/3/23 20:06
 * @description 有效的字母异位词 'a':97  'z':122  'z'-'a'=25
 */
public class T242 {
    public static void main(String[] args) {
        System.out.println((int)'a');
        System.out.println((int)'z');
    }

    /**
     * 排序之后进行比较字符串的内容是否是相等的
     * @param s
     * @param t
     * @return
     */
    public boolean isAnagram(String s, String t) {
        char[] char_S = s.toCharArray();
        char[] char_T = t.toCharArray();
        Arrays.sort(char_S);
        Arrays.sort(char_T);
        return String.valueOf(char_S).equals(String.valueOf(char_T));
    }

    /**
     * 使用hash映射的思路用一个数组当作hash表，第一个字符串的每个数往hash表里面的映射位置加上+1，
     * 第二个字符串的每个数字往hash表里面的位置映射上减去一
     * 字符-字符=阿拉伯数字
     *
     * @param s
     * @param t
     * @return
     */
    public boolean isAnagram2(String s, String t) {
        //先判断两个字符串的长度，如果长度不一样，就直接返回false
        if (s.length() != t.length()) {
            return false;
        }
        //维护26个字母的一个hash表:0号位置放'a',25号位置放'z'
        int[] alpha = new int[26];

        for (int i = 0; i < s.length(); i++) {
            //第一个字符串的字符负责往hash表里面加1
            alpha[s.charAt(i) - 'a']++;
            //第二个字符串的字符负责往hash表里面减1
            alpha[t.charAt(i) - 'a']--;
        }
        //最后遍历hash表，如果表里面每个位置的元素都是0的，那么就说明s和t符合要求
        for (int i = 0; i < alpha.length; i++) {
            if (alpha[i] != 0) {
                return false;
            }
        }
        return true;
    }
}
